The present invention relates to computers and, more particularly, to the management of updates for computer software. A major objective of the present invention is to provide for optimally selecting updates for a given hardware/software configuration.
Much of modern progress is associated with the increasing prevalence of computers. Computers include one or more processors and memory. The memory stores data and instructions; a processor manipulates data by executing instructions. Instructions are organized into programs to perform meaningful work. While the first programs were quite simple, the size and complexity of the most sophisticated programs have increased exponentially.
Almost inevitably, it becomes necessary or desirable to modify a program: 1) to correct a defect, 2) to address a compatibility issue with other software or hardware, 3) to improve performance, and/or 4) to add features. (If no new features are added, the update is called a “patch”; if new features are added, the update is called an “upgrade”.) Instead of replacing an entire program, the program can be updated. Updating can involve actually changing the instructions in a monolithic program. However, partly to facilitate updates, programs are often configured as a group of files so that an update can simply involve a replacing a pre-existing file with an update file.
Update installation can be problematic if the update renders a program incompatible with a program that was previously compatible. Typically, “uninstall” programs are available to restore the pre-update state of the computer. However, the objective of the update is then not accomplished.
Often, available updates are not installed. A user may avoid changing a system that is serving its purpose well; or a user may not be aware of an update's availability. In such cases, available updates can be superseded one or more times before a user tries to update. This can present a choice of updates. Normally, the most recent update is installed. However, if the most recent update is unsuccessful, e.g., raises new compatibility issues, optimizing the selection of updates can be problematic.
Update selection can be difficult for a number of reasons. In the first place, one update may be dependent on another update having been installed. In addition, update successions can be complex since one update can supersede more than one prior update. What is needed is a way to improve update selection when there is a complex succession of updates.